package service

import (
	"errors"
	"starry_sky/internal/core"
	"starry_sky/internal/dal"
	"starry_sky/internal/tools/logger"
)

// Insert 创建对象
func Insert[T any](t *T) error {
	err := dal.Insert(t)
	if logger.HasError(err) {
		return errors.New("创建失败")
	}
	return nil
}

// Save 保存对象
func Save[T any](t *T) error {
	err := dal.Save(t)
	if logger.HasError(err) {
		return errors.New("更新失败")
	}
	return nil
}

// UpdateForMap 根据map更新
func UpdateForMap[T any](t *T, m map[string]any) error {
	err := dal.UpdateForMap(t, m)
	if logger.HasError(err) {
		return errors.New("更新失败")
	}
	return nil
}

// UpdateForObj 忽略默认属性更新
func UpdateForObj[T any](t *T) error {
	err := dal.UpdateForObj(t)
	if logger.HasError(err) {
		return errors.New("更新失败")
	}
	return nil
}

// Delete 删除(根据是否包含DeletedAt字段判断是逻辑删除还是物理删除)
func Delete[T any](t *T) error {
	err := dal.Delete(t)
	if logger.HasError(err) {
		return errors.New("删除失败")
	}
	return nil
}

// FindById 跟具id查询
func FindById[T any](t *T) error {
	err := dal.FindById(t)
	if logger.HasError(err) {
		return errors.New("查询失败")
	}
	return nil
}

func FindAll[T any](t *[]T) error {
	err := dal.GetAll(t)
	if logger.HasError(err) {
		return errors.New("查询失败")
	}
	return nil
}

func FindPage[T any](pageSupport *core.PageSupport[T], wrapper map[string]any, preloadNames []string, keyColumn ...string) error {
	err := dal.FindPage(pageSupport, wrapper, preloadNames, keyColumn...)
	if logger.HasError(err) {
		return errors.New("查询失败")
	}
	return nil
}
